<?php
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

/*
 * $expTime 失效时间秒
 * $data 自定义加密数据 array
 * @param $data
 * @return string
 */
 function JwtSignToken($data , $expTime=3600){
         if (empty($data) || empty(is_array($data))){
             die('值错误');
         }
        $token = [
            "iss"=>config('token.jwtkey'),  //签发者 可以为空
            "aud"=>md5('61e66328694f05c2235588ce1ff41364'), //面象的用户，可以为空
            "iat" => time(), //签发生效时间
            "nbf" => time(), //在什么时候jwt开始生效
            "exp" => time()+$expTime, //token 过期时间
            "data"=>$data
        ];
        return JWT::encode($token, config('token.jwtkey'), 'HS256');
}

/*
 * $sign 加密串解密
 * @return stdClass
 */
function JwtVerifyTokenDecode($sign){
    try{
        return JWT::decode($sign, new Key(config('token.jwtkey'), 'HS256'))->data;
    }catch(\thans\jwt\exception\TokenExpiredException $e){
        return '';
    }catch(\Exception $e){
        return '';
    }
}

function jwtMessage($data)
{
    $sing = JwtSignToken($data);
    if (empty($sing)){
        return json(['code' => 400, 'msg' => '签名错误','time'=>time()]);
    }
    $result = JwtVerifyTokenDecode($sing);
    return json($result);
}

function redis()
{
    $redis = new Redis();
    try {
        $redis->connect(config('redis.host'), config('redis.port'));
        $redis->auth(config('redis.password'));
    } catch (RedisException $e) {
        return $e->getMessage();
    }
    return $redis;
}

function socketMsg($tcp = 'tcp://127.0.0.1:5678' , $data)
{
    // 建立socket连接到内部推送端口
    $client = stream_socket_client($tcp, $errno, $errmsg, 1);
    // 推送的数据，包含uid字段，表示是给这个uid推送
//    $data = array('uid'=>'uid1', 'percent'=>'88%');
   // 发送数据，注意5678端口是Text协议的端口，Text协议需要在数据末尾加上换行符
    fwrite($client, json_encode($data)."\n");
    // 读取推送结果
    echo fread($client, 8192);
}

function rsJson($data=[],$code=200,$msg='成功!'){
    return json(['data'=>$data,'code' => $code,'msg' => $msg,'time'=>time()]);
}

